{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# American options\n",
    "\n",
    "\n",
    "## Contents\n",
    "   - [Optimal early exercise boundary](#sec1)\n",
    "   - [Binomial tree](#sec2)\n",
    "   - [Longstaff - Schwartz](#sec3)\n",
    "   - [Perpetual put](#sec4)\n",
    "   \n",
    "   \n",
    "The American option problem is an optimal stopping problem formulated as follows:\n",
    "\n",
    "$$ V(t,s) =  \\sup_{\\tau \\in [t,T]} \\mathbb{E}^{\\mathbb{Q}}\\biggl[ e^{-r(\\tau-t)} \\Phi(S_{\\tau}) \\bigg| S_t=s \\biggr]$$\n",
    "\n",
    "where $\\Phi(\\cdot)$ is the payoff, also called *intrinsic value*.    \n",
    "This formula resembles the formula of a European option, except that in this case the option can be exercised at any time. But... at which time? The problem is to find the best exercise time $\\tau$ that maximizes the expectation.\n",
    "\n",
    "Notice that the time $\\tau$ is a random variable! It can be different for different paths of the stock process.   \n",
    "The solution of the problem provides a strategy, that at each time assesses if it is optimal to exercise the option or not, depending on the current value of the underlying stock.\n",
    "\n",
    "It can be proved that the function $V(t,s)$ is the solution of the following PDE:\n",
    "\n",
    "\\begin{equation}\n",
    "\\max \\biggl\\{  \\frac{\\partial  V(t,s)}{\\partial t}  \n",
    "          + r\\,s \\frac{\\partial V(t,s)}{\\partial s}\n",
    "          + \\frac{1}{2} \\sigma^2 s^2 \\frac{\\partial^2  V(t,s)}{\\partial s^2} - r  V(t,s), \\;  \n",
    "          \\Phi(s) - V(t,s) \\biggr\\}  = 0.\n",
    "\\end{equation}\n",
    "\n",
    "$$ V(T,s) = \\Phi(s) $$\n",
    "\n",
    "The numerical algorithm for solving this PDE is almost identical to the algorithm proposed in the notebook **2.1** for the Black-Scholes PDE. \n",
    "\n",
    "Let us have a look at the differences between the implementation of the European and the American algorithm, in the class `BS_pricer`:\n",
    "\n",
    "```python\n",
    "if self.exercise==\"European\":        \n",
    "    for i in range(Ntime-2,-1,-1):\n",
    "        offset[0] = a * V[0,i]  \n",
    "        offset[-1] = c * V[-1,i]\n",
    "        V[1:-1,i] = spsolve( D, (V[1:-1,i+1] - offset) )\n",
    "elif self.exercise==\"American\":\n",
    "    for i in range(Ntime-2,-1,-1):\n",
    "        offset[0] = a * V[0,i]\n",
    "        offset[-1] = c * V[-1,i]\n",
    "        V[1:-1,i] = np.maximum( spsolve( D, (V[1:-1,i+1] - offset) ), Payoff[1:-1])\n",
    "```\n",
    "\n",
    "The European and the American algorithms just differ in one line!!    \n",
    "\n",
    "I don't consider dividends in the notebook. In absence of dividends the American call has the same value of the European call. For this reason, I'm going to consider only the pricing problem of a put option\n",
    "\n",
    "$$ \\Phi(S_{\\tau}) = ( K - S_{\\tau} )^+ $$\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from functions.BS_pricer import BS_pricer\n",
    "from functions.Parameters import Option_param\n",
    "from functions.Processes import Diffusion_process\n",
    "from functions.cython.cython_functions import PSOR\n",
    "\n",
    "import numpy as np\n",
    "import scipy.stats as ss\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "from IPython.display import display\n",
    "import sympy; sympy.init_printing()\n",
    "\n",
    "def display_matrix(m):\n",
    "    display(sympy.Matrix(m))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Creates the object with the parameters of the option\n",
    "opt_param = Option_param(S0=100, K=100, T=1, exercise=\"American\", payoff=\"put\" )\n",
    "# Creates the object with the parameters of the process\n",
    "diff_param = Diffusion_process(r=0.1, sig=0.2)\n",
    "# Creates the pricer object\n",
    "BS = BS_pricer(opt_param, diff_param)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The class `BS_pricer` implements two algorithms to price American options:\n",
    "- the Longstaff-Schwartz Method (see section [below](#sec2))\n",
    "- the PDE method"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKEAAAAPCAYAAACMR68oAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAG1klEQVRoBe2a3XEVORBGxy4HYNgIFjIAOwPIgF1HAGQA5Te/uSADcAQsZAAbAT8ZABFgyMB7jkYtNDO692q8W/tEV+lK6m59arVaPZqx966uroYWnZ2d3YH/mPpxSz7noXcI71Hm/0Zt/zX8d5mXqqz3jM4PymfKbcor+J+oVxPjbjGotlG7X8B/MwfLc/fY2I1ZzwH+Rp/12pn1nmZc7ZCewl/4pxdzhBgG9PW79I3iHk38jrxrDwXIurGPsrRVO7/YkWjrj9cUbb+kuOcTQufpwYQz7Ti4AE5Fzd4zAOtg0AiD8JBSB8TfjD4PnnL6H6nvUxbzwXuA/ILyO+3JIujHwsu8Wd95PUAvGVfTThuvgVnjN33Wi4mevtDGPwKUthsd/ikHuhdTHHTF1e8GScKgfkFfv96lBO30j4oZ7ytN8ZKPqd0L7bxLiX08giff0qIUF/stCSBP4N9syVo89A2Ujw2ZJ/o0+OiZhW5Rl6CkbWDZdwMTwTNwDSQddULRiS1y3kfoWSeiHdiRTYLfZSPK3ZjjjOMv827zWS+mQfFwhus69FHxT5b3Yqru2A/YWIKYvoFhdkqUfbhzD7O6dg6MKYectoEnfu13A/w2sr15gf8GXjpsiyBEoHEuOqKZ5k46RqOc3krbRdYBpE7tiFB9T+MOcydd6h8aSDHDKdtEpnlttSQKDDqFl0W9Nq7BjDl3+awX8x6ArUDQZx5MH29BXZiMEdMSj+I0Hr5PnvsBRt3rH4d4AFrxIS+uO+q5jws9eNpyroLUehz7GDPNlkfcqLr19y3SJ4yxNngiAMyC9eJ1RmQqmoVCf5O8KNYN5nFzbtQ82mJIZtGaumxciRn4W322AtMNS4ex8mHMMalXYKZMiv4iGCaAw9Drn8M87nI23q53zYG5XMMnSp0VFSlzf74pTwx+DqJhjcAonm9erdJsM+4dxeDyhHynbQD7wvGZdtwZthmPaiIzyrWJuZzDoH8e8wYY/Z02hm5db8NUD/lqn23ChF/fz2ozIgNuDKRNmIC46QaEGCcUA8W9mbw0Iu/yD3pmN5NG67rmy47Uko2S8R5ZZ+CfQQiwG2jK37jQQGnVjDMDGgDejQxkI72kXNphmAuYU5yqWMRcvrXPvAavge8hMDvW89IdqcPGUB16MNFZ5bMezGLAT5sNItfnwVr4bhtmti8gj+iXzETbZPGQUp5MtHftYWCZWNznOWmr1Ewm4Bsf87vtsJ+GjD+nKD2v+quajDUAnNwoT48V6q/wwzC6idy4/5SY4wvFK4Qn3I1qzTsg77VR3R7MVT7rxJz7xgPtJb4EUK3QiWkW/Ksel/sXjC/7QbvLP9kWs2sJxDw27vuRVMqUyJ3HK1t5mQlhCsIM8CqYa2vG+0g6ofYkmdYNBp3mxOkzDfXCMHhBkSXTnSKY16mZOzYr5k0w8HtsbE7ZwoTnhv0bnzXtrA1gDgNQf7Ze+mrV1J7bSd8DKXmgoj1yxhcg9+dIBvJV/kHfq4OPZgPLYKyfoHVbeEl8n44L2gdAQ46pmwqLEW2GaTacmjTAM6tqqPj36IcTIuCSXv5RR2oZP0oav2D6ucfsO6cPMNK8lWCnjer2YKIjdrfPejArO1OTMSnLUHvNWNAKTH0avl/gwAj/dfmnBsCGlxSvCRbjJ7Ba++g6monoAEG6cwAyf1abwo10+e+diHpB8N2Q5l0SmSnbO0cEXvrUsACZyhvijSz/4jIwxw3KRkcjW2NjD+Zan/VglkVir1nW72slAGmnDaaODe7FNDjmV6IyFw2z5Br/1GPnbW306jDZi4yvrJnoDlAwSMrlNFDhf6ftB86tjwLkBqrFrBQOChhrFxh3BQPaEzcnM6YBOzF+rtToq6+N83FxItOilefSY+NOTLBc5xqf7cSMtYHt4fcbXgnALDMw6zl7Mc8Z9wA8E0Xtp3icpr1RRunxz4Cej1b3sfx1BJ52W1rxEvvRzIT7DNpEh3MBE7mQK8r8g6oTT+5gjkVPY99Sp+Ck9lJ6Sa1DE9F2nj8pk78UjNKdv14BJhk8Y7toX1TqQ9Flo+NWYKI6oYXPsrQLE3u12/UYEP4JzeLfweX5LbJeTy+mB9HgPaUkAqfl817/iOF4bUlBlfEu6M9thJUogjD6k3pv/g8MABrhRnSkcBdgIMX3Ph8DZq1JxNN3jAvVsB8UDTUwIwvSTYEpX714CTmmfY6ezipE30v5TYp2OEa5Cy+20B7QU17b4oLdvMm8WbfXxm7MjLvVZ1lnJyY2e7i1sUU+Nn3hK7Ry7dqoHyX92vJ5l38EYO4aT9Zir2VK6Lonrm3ySUiZtAjCkf3r95cH/j8P/APaAU+BtOom1wAAAABJRU5ErkJggg==\n",
      "text/latex": [
       "$\\displaystyle 4.80138343236897$"
      ],
      "text/plain": [
       "4.80138343236897"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "BS.LSM(N=10000, paths=10000, order=2)  # Longstaff Schwartz Method"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle 4.815638949372102$"
      ],
      "text/plain": [
       "4.815638949372102"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "N_space = 8000\n",
    "N_time = 5000\n",
    "BS.PDE_price((N_space,N_time))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Plot American put curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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TuG7a0dyytbpzGh7S9DliIiI5JtHHnmEnj178q9//SvoUsKmQIYXgPYj+jKl6c20n/c031zzRtDliIiI5Is77riD1atXR/WYlsMpsOEFoN3Xw/iu9Ok0fW4w37/zXdDliIiISB4o0OElsWgC1aaPZkt8BYr178FvKzYFXZKIiIgcowIdXgAqNa7AlhfHU37/r6xsczEH9uwPuiQRERE5BgU+vACcfHkyMwf8l2abJ/H16XcHXY6IiIgcg5gILwAdX72cKQ2uocOM4cz++5igyxEREcm1+Ph4kpKSaNKkCc2aNeObb74BYOfOnfTr14+TTz6Zxo0b065dO7Zv3x5wteFXoGbYzYkZtJn1BAuqzqPRo5fzU/uG1D2/cdBliYiIHFb68gAAn376KXfeeSdffvklTz75JJUqVWLhwoUALF++nMTEvJvbzDmHc464uMjq64isasKsSKlClJsylh1xJYnv1Z2ta34PuiQREZEjsnXrVsqUKQPA+vXr/1wiAODEE0+kcOHCf3nPJ598QrNmzWjSpAmdO3cG/Ay9jz766J+vady4MatWrWLVqlU0bNiQa6+9lmbNmvGPf/zjkEUcX331Va6//noA3nzzTVq2bElSUhJXXXUVBw4cCMvPnFlMhReAai2q8ssTY6i6bxXLW/UnbX9a0CWJiIjkKH1V6QYNGnDllVdy7733An4F6WHDhtGmTRvuueceVqxY8Zf3pqamMmjQIMaNG8f8+fMZM+bwQyeWL1/OgAEDmDt3Ltdee+2fq1EDjB49mj59+rB06VJGjx7N119/zbx584iPj2fUqFF590PnIGYuG2XU9Pp2fDH1CTqNH8K0Mx+k/eT7gy5JRESiwdChELp8k2eSkg674mPGy0YzZsxgwIABLFq0iKSkJH766Sc+++wzJk2aRIsWLZgxY8Yh0/HPnDmTDh06UKdOHQDKli172JJq1apF69atAahQoQJ169Zl5syZ1K9fn+XLl3PqqacyYsQI5syZQ4sWLQAfsCpWrHjkP/9RiMnwAnD6mGv5qt63dPjiAb57oDnN7jsv6JJEREQOq02bNmzatInU1FQqVqxIiRIl6NGjBz169CAuLo6JEyceEl6cc5jZXz4nISGBtLSDVx927979537x4sUPeW2fPn149913adCgAd27d8fMcM4xcODAQJYhiNnwYnFG89n/ZUnNhdS7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\n",
      "text/plain": [
       "<Figure size 648x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(9,5))\n",
    "BS.plot([70,140,0,30])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id='sec1'></a>\n",
    "## Optimal early exercise boundary\n",
    "\n",
    "Let us define a free boundary by the value $0<S_f<K$ such that if the current stock price $S_t$ is smaller than $S_f$, then it is optimal to exercise the option, otherwise it is optimal to wait.\n",
    "\n",
    "- $S_t < S_f \\quad $ called  **stopping region**\n",
    "- $S_t > S_f \\quad $ called  **continuation region**\n",
    "\n",
    "In the stopping region, the value of the option corresponds to its [intrinsic value](https://en.wikipedia.org/wiki/Intrinsic_value_(finance)) i.e. $V(t,S_t) = K-S_t$.     \n",
    "\n",
    "In order to find $S_f$ we have to find the maximum value $s$ such that $V(t,s) - (K-s) = 0$:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "payoff = BS.payoff_f(BS.S_vec).reshape(len(BS.S_vec),1)    # Transform the payoff in a column vector \n",
    "mesh = (BS.mesh - payoff)[1:-1,:-1]                        # I remove the boundary terms   \n",
    "optimal_indeces = np.argmax( np.abs(mesh)>1e-10, axis=0  ) # I introduce the error 1e-10 \n",
    "T_vec = np.linspace(0, BS.T, N_time)                       # Time vector "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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yDiic2zYsIE+ffrQtWtXXn75ZWrXrk1UVBT9+/c/4nOlpKSQnZ1doD0ObpekPUpyzUPPn5KSwrZt24iMjCxQNzw8HIBt27YBFJiUfLhJylu3biUuLq7AHVc1atQgLS2NzMxMoqOji3w/wBG3o0h58MzX3luS/9G3eZAjOXoBTVTM7A5gOGDAq865Z/Ls+wfwHyDROXf8F8+QkBMZGUm3bt346quvePTRR4utW6tWLZKTkwuUb9++nWrVqp2oEEukQoUKBXprDk0WvvzyS9LS0vj444+JjY0FICcnp0C9kqhevTqRkZEF2mP79u0Ax609Du3pqlatGnXq1Cn09umDatasCcCOHTvyxbFjx45ir1WrVi0OHDhAWlpavmRl+/btxMTE+JMUESm5r5ZvY/OedHq3qkF8hYJ/YJQWARv6MbM2eJOUrkB74Hwza+rbVw/oDRz+T2spU0aOHMnChQt54403CuzzeDx8+eWXAJxyyikkJyfz3Xff+fenpaXx2WefccYZZxzRNY/3X+B169Zl/fr1+c43c+bMfHXS09MJCwvLNyQ1efLkfHfpHIztcHGFh4fTqVMnpkyZkq988uTJhIWFcdpppx3tWynW2WefzbZt24iLi6Nz584FXgBt27alQoUKfPzxx/7jnHNMnz692HN36dIFM8s3Sdk5xwcffHDE318R8f7/+cfkJQD8a1CbIEdzbALZo9ISmO+cSwMwsznAhcCTwNPAPcDHRR8uZdGAAQO48847uf7665k7dy6DBg0iLi6OlStX8tJLL9GwYUPOPfdc+vbtS7du3bjssst44oknSEhIYNy4caSnp3P33Xcf0TWbN/d2gb788ssMGTKEmJgY/+23R+OCCy7goYce4oYbbmDYsGEsXryYiRMn5qtz1llnkZuby7XXXsv111/P8uXLGTduXIFhjBYtWvDVV1/x1VdfkZCQQKNGjUhISChwzTFjxtC3b1+uvfZahgwZwtKlS3nwwQcZPnw4devWPer3UpzevXvTt29fevfuzb333kvr1q3Zt28fv/zyCxkZGTz++OMkJCQwfPhwHn74YSIjI2nZsiUTJ05k3759xc5FatmyJZdffjm33nor+/bto0mTJrz66qusXLmSF1988YS8H5GybPqvW9mfmUO3JgnUrFwh2OEck0BOpl0G9DCzBDOLAfoB9cxsILDZObckgLFI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J8uXLy/2vcnRU/oucgwOZObwyPTlpGb91VPy+7b9rEk+UGj9cYPbExcd7t9uWSueBgmxhdaV0q1r16688cYbNG7cmEGDBtGsWbMCdW644QY2bdrEhAkT+P777wkP/+tnIzU1lZ49e7J7927+/e9/U69ePd5++22uvvpq0tLSGDEi/9qYV111FZdeeik333wzCxYs4JFHHiE1NbXAPJPHH3+cDh06MHHiRJKTk7n//vvp06cPy5cvJzIystj3dPXVV3P55ZczdepU5s2bx+jRo6latao/2crKyqJ3795kZGTwwgsvkJSUxGuvvcYHH3xQ4nZbtWoVt99+Ow8++CCNGzemWrVqbNy4kVNOOYWkpCSefvppEhMTef/997n44ov56KOPGDhwIAAzZ87kyiuvZODAgYwfP56UlBRGjhxJRkZGoe2f1wMPPMDjjz/OLbfcwoABA/jtt9948MEHWbJkCXPmzMk3LPf222/TvHlznn32WbKysrj77rsZNGgQK1euVK/YieCcK3WvTp06OZETyePxuD9TUt3aHQf8rzm/J7uuj810nR/969Xg3k9dg3s/dW0e+tKdNW6W/zXw+e/dxl2pbueBTP8rPSsn2G9LAuj33393bdu2dXgX9nUJCQluyJAh7quvvspX7+GHH3aAy87Ozlf+3//+1wFu1qxZ+crPPvtsl5iY6HJyvD9PEydOdIC78cYb89V79NFHXVhYmPv999+dc86tW7fOAa5ly5YuNzfXX+/77793gHvttdf8ZQ0aNHBDhw71bx+8xkMPPZTvGv3793dNmzb1b7/88ssOcD/++KO/zOPxuHbt2jnArVu3rtg269mzpzMzt3jx4nzl1113natevbpLSUnJV37OOee49u3b+7dPO+0017p1a+fxePxlP//8swNcz549/WWzZs3K17Y7d+500dHR+d6zc8699dZbDnAff/yxvwxwTZo0cVlZWf6yKVOmOMDNnTu32PcnRQMWuiI+85X6Sbm3cVcaP/yRkq/so8VbCl17BLzPs8m7CFpipWhGnt1U649IPs2aNWPx4sXMnTuXGTNmMH/+fKZNm8Z7773Hv/71L0aNGlXs8d999x116tQpcFfKVVddxbXXXstvv/1G27Zt/eWXXnppvnpDhgxh1KhRLFiwIF9vwiWXXJKvd6Bbt27UrVuXefPmcf311xcbU//+/fNtt23blq+//tq/PX/+fOrXr0/Xrl39ZWbGxRdfzK+//lrsuQ9q2LAhHTp0yFf25Zdf0q9fPypXrkxOTo6/vG/fvtx9993s27eP2NhYFi5cyH333Zdv+Kxjx440atSo2GvOnz+fzMxMrrrqqnzlQ4YM4dprr2XOnDn+XhuA3r175+t9Ovh92LBhA6effnqJ3qeUnBIVKTecczw1cxWb96TnK5+6aHOh9SPCjHGD2+crS6oUzem+h+6JHE54eDg9evSgR48eAGzZsoVzzz2XMWPGcMstt1C1atF3au3atYtatWoVKD8472XXrl35ymvUqFHo9ubNm4utd7Ds0HqFqVatWr7t6OhoMjP/unV+69atJCUlFXr+kirsPScnJ/Pmm2/y5ptvFnrMzp07SU9PJzs7+6iuf7AtD712REQECQkJBdq6sHYACszXkeNDiYqUenvTszmQmZOv7IulW3lj3nryPGOPPWlZ/rkkdatW9JfXrVqRAe1rc/WpDfKdo1psFBUiwxE5XmrXrs0NN9zAHXfcwerVq/P1PByqWrVq/P777wXKt23zPvogISEhX/n27dtp3bp1vm2AOnXqFKh3qO3btxfoxTgatWrV4rfffiv0/CVV2ETxhIQEunfvzr333lvoMbVr1yYiIoLIyEiSk5MLvX79+vWLvObBxGPbtm352jAnJ4edO3cWaGsJLCUqUmqs3XGAJZv25CvbeSCLRz9bUeQxF3esm2+7YlQYd/dtQeWKxU8aFDlWGzdupF69egXKV65cCfzVM3Lwr/H09HQqVarkr9ezZ0+mTJnC3Llz6datm7/83XffJSkpiZYtW+Y77+TJkznrrLP82++99x5hYWEFkqEPPviA0aNH+4d/5s6dy6ZNmzjttNOO5e0CcOqppzJx4kQWLFjgv65zjg8//PCYznvuuecyb948WrduTcWKFYus17lzZz788ENGjx7tT3h+/vln1q1bV2yicuqppxIdHc17773H2Wef7S9///33ycnJoWfPnscUvxwbJSoSclZs3ceb8/7EHbLGz3s/bSzymOu6NaJFzUr5ytrXq0LzQ8pEAqVNmzaceeaZXHjhhTRq1Ih9+/bx+eef89JLL3HppZf6PzgPLjo2fvx4zjvvPMLDw+ncuTPDhg3j2Wef5aKLLuKxxx6jbt26vPPOO8ycOZOXX3453x1CAJ9//jl33303ffr0YcGCBYwZM4ZrrrmmwN0u+/fv54ILLuDGG29kx44d3HfffTRt2pRrrrnmmN/zsGHDGDt2rD/mxMREXnvtNXbv3g1w1AvaPfLII3Tt2pUePXpw66230rBhQ3bv3s2yZctYu3Ytr7/+OgBjxoyhT58+XHjhhYwYMYKUlBRGjx5NzZo1i712tWrVuPPOO3n88ceJjY2lX79+rFixglGjRnHGGWcUmJsjgaVERQJid2oW2XnHYYAf1uzkv9+u5tA1B9empAJQIz7/Ik814ytwedf6DOpQO195TFQ4SfEVjn/QIsdg7NixfP755zz00ENs376d8PBwmjVrxhNPPMHIkSP99c4//3xuvvlmXnjhBR555BH/nQ6xsbHMmTOHe+65h3/+85/s37+f5s2b89ZbbxWY9AneW2bHjx/Piy++SFRUFMOHD2fcuHEF6t13332sWbOGYcOGkZqayplnnsnzzz9/2FuTSyIqKooZM2Zw2223cdNNNxEXF8cVV1zBKaecwj//+U8qVz66RzrUr1+fhQsXMnr0aO6//3527NhBQkICbdq0YejQof56vXv35p133mHMmDFceOGFNGnShPHjx/PII48c9toHE6uXXnqJF154gYSEBK655hoef/zxkFkxuLzSyrRy3OxNz+b71Sn5VloF+HrFdj7+ZUuRx53frlaBcekeTaszuHPBbnMRyW/SpElce+21rF69miZNmhRZb/369TRq1IhXX32VG264IYARepOxFStW8McffwT0ugCbNm2iSZMmPPDAAzz44IMBv76UTHEr06pHRY7YZ79uZX4ht+5+tHgz+w+Z1JrXvy5ow6HT5FrVjqejnlEjUmY89dRTxMXF0bRpU/bv38+UKVP47LPPePHFF0/4tdPT07nzzjs555xzqF69OmvXruXJJ58kJiYm4MmZHD9KVMo5j8exNz27QPnO1ExGvv8LWTmeAvtWbfeuupr32TMAkRFhnNkwkQf6tyxwTGJcBSrHaAKrSFkXHR3N008/zYYNG8jNzaV58+a89tprh12j5XgIDw9n27Zt3HrrrezcuZPY2Fi6d+/OlClTCr3tWUoHDf2UAx6P47vVO8jI80C8g8bPWMXqIpZ7B++E1NqV88//CDPjxp6NaVe3yvEOVUREyiEN/ZQDzjkmfL+OTbvTC+z7+c/dLN28t8hja1euwIgejQuUV68U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\n",
      "text/plain": [
       "<Figure size 648x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(9,5))\n",
    "plt.plot(T_vec[:-1], BS.S_vec[optimal_indeces])\n",
    "plt.text(0.2, 94, \"Continuation region\", fontsize=15)\n",
    "plt.text(0.6, 87, \"Stopping region\", fontsize=16)\n",
    "plt.xlabel(\"Time\"); plt.ylabel(\"$S_f$\"); plt.title(\"Early exercise curve\"); \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id='sec2'></a>\n",
    "## Binomial tree\n",
    "\n",
    "One of the most used methods for pricing American options is the Binomial tree. \n",
    "\n",
    "We have already encountered the binomial tree in the notebook **1.1**. The following algorithm is almost a copy/paste from that notebook.     \n",
    "There are just two additional lines:\n",
    "- `S_T = S_T * u`. This an efficient method to retrive the price vector at each time steps.  \n",
    "- `V = np.maximum( V, K-S_T )`. This line computes the maximum between the conditional expectation V and the intrisic value. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "S0=100.0    # spot stock price\n",
    "K=100.0     # strike\n",
    "T=1.0       # maturity \n",
    "r=0.1       # risk free rate \n",
    "sig=0.2     # diffusion coefficient or volatility"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "American BS Tree Price:  4.81624866310944\n"
     ]
    }
   ],
   "source": [
    "N = 25000              # number of periods or number of time steps  \n",
    "payoff = \"put\"        # payoff \n",
    "\n",
    "dT = float(T) / N                             # Delta t\n",
    "u = np.exp(sig * np.sqrt(dT))                 # up factor\n",
    "d = 1.0 / u                                   # down factor \n",
    "\n",
    "V = np.zeros(N+1)                             # initialize the price vector\n",
    "S_T = np.array( [(S0 * u**j * d**(N - j)) for j in range(N + 1)] )  # price S_T at time T\n",
    "\n",
    "a = np.exp(r * dT)    # risk free compound return\n",
    "p = (a - d)/ (u - d)  # risk neutral up probability\n",
    "q = 1.0 - p           # risk neutral down probability   \n",
    "\n",
    "if payoff ==\"call\":\n",
    "    V[:] = np.maximum(S_T-K, 0.0)\n",
    "elif payoff ==\"put\":\n",
    "    V[:] = np.maximum(K-S_T, 0.0)\n",
    "\n",
    "for i in range(N-1, -1, -1):\n",
    "    V[:-1] = np.exp(-r*dT) * (p * V[1:] + q * V[:-1])    # the price vector is overwritten at each step\n",
    "    S_T = S_T * u                    # it is a tricky way to obtain the price at the previous time step\n",
    "    if payoff==\"call\":\n",
    "        V = np.maximum( V, S_T-K )\n",
    "    elif payoff==\"put\":\n",
    "        V = np.maximum( V, K-S_T )\n",
    "    \n",
    "print(\"American BS Tree Price: \", V[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id='sec3'></a>\n",
    "## Longstaff - Schwartz Method\n",
    "\n",
    "This is a Monte Carlo algorithm proposed by Longstaff and Schwartz in the paper [1]:\n",
    "[LS Method](https://people.math.ethz.ch/~hjfurrer/teaching/LongstaffSchwartzAmericanOptionsLeastSquareMonteCarlo.pdf)\n",
    "\n",
    "The algorithm is not difficult to implement, but it can be difficult to understand.  I think this is the reason the authors started the paper with an example.    \n",
    "Well. I think they had a good idea, and for this reason I want to reproduce their example here. \n",
    "\n",
    "The same code is copied in the class `BS_pricer` where the function `LSM` is implemented.\n",
    "\n",
    "**If in the following code you feel that something is unclear, I suggest you to follow the steps (not in python) proposed in the original paper**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "N = 4          # number of time steps\n",
    "r = 0.06       # interest rate\n",
    "K = 1.1        # strike \n",
    "T = 3          # Maturity\n",
    "\n",
    "dt = T/(N-1)          # time interval\n",
    "df = np.exp(-r * dt)  # discount factor per time interval"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "S = np.array([\n",
    "            [1.00, 1.09, 1.08, 1.34],\n",
    "            [1.00, 1.16, 1.26, 1.54],\n",
    "            [1.00, 1.22, 1.07, 1.03],\n",
    "            [1.00, 0.93, 0.97, 0.92],\n",
    "            [1.00, 1.11, 1.56, 1.52],\n",
    "            [1.00, 0.76, 0.77, 0.90],\n",
    "            [1.00, 0.92, 0.84, 1.01],\n",
    "            [1.00, 0.88, 1.22, 1.34]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\left[\\begin{matrix}1.0 & 1.09 & 1.08 & 1.34\\\\1.0 & 1.16 & 1.26 & 1.54\\\\1.0 & 1.22 & 1.07 & 1.03\\\\1.0 & 0.93 & 0.97 & 0.92\\\\1.0 & 1.11 & 1.56 & 1.52\\\\1.0 & 0.76 & 0.77 & 0.9\\\\1.0 & 0.92 & 0.84 & 1.01\\\\1.0 & 0.88 & 1.22 & 1.34\\end{matrix}\\right]$"
      ],
      "text/plain": [
       "⎡1.0  1.09  1.08  1.34⎤\n",
       "⎢                     ⎥\n",
       "⎢1.0  1.16  1.26  1.54⎥\n",
       "⎢                     ⎥\n",
       "⎢1.0  1.22  1.07  1.03⎥\n",
       "⎢                     ⎥\n",
       "⎢1.0  0.93  0.97  0.92⎥\n",
       "⎢                     ⎥\n",
       "⎢1.0  1.11  1.56  1.52⎥\n",
       "⎢                     ⎥\n",
       "⎢1.0  0.76  0.77  0.9 ⎥\n",
       "⎢                     ⎥\n",
       "⎢1.0  0.92  0.84  1.01⎥\n",
       "⎢                     ⎥\n",
       "⎣1.0  0.88  1.22  1.34⎦"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display_matrix(S)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the previous cell we defined the stock matrix S.   \n",
    "It has 8 rows that correspond to the number of paths.  \n",
    "The 4 columns correspond to the 4 time steps, i.e. each row is a path with 4 time steps."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Example price=  0.11443433004505696\n"
     ]
    }
   ],
   "source": [
    "H = np.maximum(K - S, 0)           # intrinsic values for put option\n",
    "V = np.zeros_like(H)               # value matrix\n",
    "V[:,-1] = H[:,-1]\n",
    "\n",
    "# Valuation by LS Method\n",
    "for t in range(N-2, 0, -1):\n",
    "\n",
    "    good_paths = H[:,t] > 0        # paths where the intrinsic value is positive \n",
    "                                   # the regression is performed only on these paths \n",
    "    \n",
    "    rg = np.polyfit( S[good_paths, t], V[good_paths, t+1] * df, 2)    # polynomial regression\n",
    "    C = np.polyval( rg, S[good_paths,t] )                             # evaluation of regression  \n",
    "    \n",
    "    exercise = np.zeros( len(good_paths), dtype=bool)    # initialize\n",
    "    exercise[good_paths] = H[good_paths,t] > C           # paths where it is optimal to exercise\n",
    "    \n",
    "    V[exercise,t] = H[exercise,t]                        # set V equal to H where it is optimal to exercise \n",
    "    V[exercise,t+1:] = 0                                 # set future cash flows, for that path, equal to zero  \n",
    "    discount_path = (V[:,t] == 0)                        # paths where we didn't exercise \n",
    "    V[discount_path,t] = V[discount_path,t+1] * df       # set V[t] in continuation region\n",
    "    \n",
    "V0 = np.mean(V[:,1]) * df  # discounted expectation of V[t=1]\n",
    "print(\"Example price= \", V0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The matrix `H = np.maximum(K - S, 0)`, is the matrix of intrinsic values:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\left[\\begin{matrix}0.1 & 0.01 & 0.02 & 0.0\\\\0.1 & 0.0 & 0.0 & 0.0\\\\0.1 & 0.0 & 0.03 & 0.07\\\\0.1 & 0.17 & 0.13 & 0.18\\\\0.1 & 0.0 & 0.0 & 0.0\\\\0.1 & 0.34 & 0.33 & 0.2\\\\0.1 & 0.18 & 0.26 & 0.09\\\\0.1 & 0.22 & 0.0 & 0.0\\end{matrix}\\right]$"
      ],
      "text/plain": [
       "⎡0.1  0.01  0.02  0.0 ⎤\n",
       "⎢                     ⎥\n",
       "⎢0.1  0.0   0.0   0.0 ⎥\n",
       "⎢                     ⎥\n",
       "⎢0.1  0.0   0.03  0.07⎥\n",
       "⎢                     ⎥\n",
       "⎢0.1  0.17  0.13  0.18⎥\n",
       "⎢                     ⎥\n",
       "⎢0.1  0.0   0.0   0.0 ⎥\n",
       "⎢                     ⎥\n",
       "⎢0.1  0.34  0.33  0.2 ⎥\n",
       "⎢                     ⎥\n",
       "⎢0.1  0.18  0.26  0.09⎥\n",
       "⎢                     ⎥\n",
       "⎣0.1  0.22  0.0   0.0 ⎦"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display_matrix(H.round(2))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The matrix V contains the cash flows.\n",
    "\n",
    "**Important**    \n",
    "To simplify the computations, the discounted cashflows are reported at every time steps. \n",
    "\n",
    "For instance:    \n",
    "In the third row the final cashflow (0.07) is discounted at every time step, till t=1.    \n",
    "In the paper, the authors just consider the cashflow (0.07) at time t=3 and the discount is performed at the end of the algorithm."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQEAAADICAYAAADofFQ1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAdnklEQVR4Ae1dXdLcNBb9ksozlSFVvM/HDjJkBQw7gGEFwA6geII3CnaQYQWB7CCwAuDbQYb3qQK+YgPMOW7fHtkt2bKPrJa7r6rctiWdq3uO7Ouftq0HX3zxxdObm5tfMMXSyy+//PKDWIHnuQKuwD4UwD78Gp7exrxF2YNHQcG/sczKYfpPuOLLroArsEsFvobXj0eeP8P6+8wLg8BzRIW7UUVfdQVcgZ0rgP2aB/hBQt7HyDgJAoNK4xWAGEkYUe4x8YzhbUwvcgOHikdbZ0uq7yr+bMTFhlXeKl50vzhc5aPiU4Qepgoi+T8i7xUc+QwTI8tXmL7HcvRaYwN8xGS1rGvmrojsug3Va1KPrCCAHZ2nDreYvzROWOYZAde/t7zUXMWn7NbIV31X8TU4btGGylvFb8FJsanyUfFTvmcFARjgPwQ/RAz9hLyncHB802FcVcWP7dVcV31X8TW5lmxL5a3iS3IpYUvlo+KTHHKDwD8TFng2wJQqP5Smy3PxZucc8xS3XN9V/Dk4l2hT5a3iS3AoaUPlo+KTXGaDQHCU/z1pJfEfJOur+Ik2Ny9SfVfxmxPcqAGVt4rfiNZqsyofFT/n+GwQgIE3eyN25AttWmB4EmaOllX8yFzVVdV3FV+VbMHGVN4qviCVIqZUPip+kkROEDADj21h5VzFr2y2CEz1XcUXIXEGIypvFX8GypNNqnxUfNS5nCBgR/uYAYtQv8UK+zwVP2F68yLVdxW/OcGNGlB5q/iNaK02q/JR8ZOOzwYBXI/c9xZshw8NWmRKPl6s4sPGai+rvqv42nxLtafyVvGleJSyo/JR8XM8ZoNAb4B/D9oOH9q0wBD7+zCsp+JDW7WXVd9VfG2+pdpTeav4UjxK2VH5qPgkj9wgwAeC3olY+Qfy7oJIFanSZan4lN0a+arvKr4Gxy3aUHmr+C04KTZVPio+6XtWEMBOzseEf8e8e+GA1rDMM4N/YfqI60zMw/QXpsGryVjPwh+stPWb6zvqXRx3pSdct6F6LevxaOjq5BqP+p+DzG1f6xnm72L9zlBYvsfE+wOxewSzeLPT4HzW9wvmrnSH6zZUr0k9HgQfFflHuEMPffc1V8AVuCQFsK/zfSB+PuBB1uXAJZF3Lq6AKzBUwIPAUA9fcwWuTgEPAlfX5U7YFRgq4EFgqIevuQJXp4AHgavrcifsCgwV8CAw1MPXXIGrU8CDwNV1uRN2BYYKeBAY6uFrrsDVKeBB4Oq63Am7AkMFPAgM9fA1V+DqFMh+dwCPF/KFIR985MoGXlH2iGveZmK6tarHkjOBJgdOiIm9Qd41c1fkdN2G6jWpR1YQQATzwUeucOCV4fa7bO2at5mYUi3rkRUEQEod+EDFx3Stlaf6ruJr8SzdjspbxZfmo9pT+aj4pP+5QUAd+EDFJwlUKFB9V/EVKG7ShMpbxW9CSjCq8lHxSddng0B/M4MGpr54eptqQcWn7NbIV31X8TU4btGGylvFb8FJsanyUfFzvs8GARiwj4neR4xZYHgSKbMsFW92zjFXfVfx5+Bcok2Vt4ovwaGkDZWPip/kkhMEzEDsa8NWljNX8TltbFVH9V3Fb8Vra7sqbxW/Nb+l9lU+Kj7qb04QsKN9zIBFKB98JKbO9CVUjnZxq+3nXvM2E+udpvVgEHij99rmAxK4HrnvM2yjDcstMsU+LNrVU/FhY7WXVd9VfG2+pdpTeav4UjxK2VH5qPgEj7csn0Hgz37F5lYWztWBD1R86EvtZdV3FV+bb6n2VN4qvhSPUnZUPip+zOO/lpFzOcC66sAHKt78Pcdc9V3Fn4NziTZV3iq+BIeSNlQ+Kj7JJSsI4HQka/AQ1Lu4ATiumXtyq8kocN2GIrWsx6Ohq5NrTQ6cMOlxucJr5q6o6LoN1WtSDx98ZNhJvuYKXIUCODPxwUeuoqedpCuQoUDWPYEMO17FFXAFdqqAB4Gddpy77QqUUsCDQCkl3Y4rsFMFPAjstOPcbVeglAIeBEop6XZcgZ0qwCDA5/4/6+c7peFuuwKuwEIF+Bgy9/sbBoFbTPyKMOeeXAFX4DoU4JeKuN93QeA6KDtLV8AViCrAMwFProArcMUKZL87gMcM+e2AXQ4+Utt3tNedZkEvfmzlCaYXyLvDvEtY5qVXdz2GuV2GfRbWOdQ8/y98qtrvaG9Ou1+gygtM/0bde0xPsfwJpldYfol5l7Ac+s28TnPkJ799cUCW+R21/xpW38Y02A6mWsrBow658+1Cblu/Y7rHNEioY9vZID9cWXIm0OTACSGZieUqvrPjMHEj5QbJnfobLHNj/NZ8Yx0sf435J/30HtbZib9gPfpFWeS/j+kPTMTWTs1o1xPnzsxAQT3+wpx6MxiMA8CvLEM++4E7AieuW9DF6qaphm7vgAH5vI+J7wJ8OpqyuD4EaDZBuN0OPlLZd0bln9Em77xaYkcwSltiQPjIVjhHfW6gjOLEdwl5DCjfY3qOjA8xVQ8AaLtmv+doR214JGdw5U5P3d6Gn5yHqQu6yOcr8F3CMnHHO+J99iazirrxrUTyfzCekP8SeRyrYDZlBQFYUQc+UPGzRCYqqG1n4SE4j+LHO67mD/Lf42TrfR0evcap+3IM6vIU7wZzHt0+wMRT3Z/GlSutZ3Gf8CULD4652rGp/6A+j+7U5htMsdN7Hhlj+cxjYNs6ZfGecCIXz23khCfyeKb01YT9QVFuEIiepsISj15MqfJDabo8F2921sxTvuW2nYvvjuaxThk5zU67Rb3qR/aRHzmrudxTtnLxudql2jnmB7qGZ19W/hsXUKcLtJa5wTyXd6rpLDx4jM+AyI3Y3zDnJWZWejRXC8ZsY42JanCe8kaTio8azcxU216Ip/h3wHAD+xATNzjeDOIp/fHyAMs8hYsl2zBPInus8tZ5C7mfuLMQn6WdNQLbdjTntkmNnyOv2+gx59GRAf5Nqx/MeZOWKVZ2KBF/0fa59xeeJYVnnrOMZoNAIBiFHScLDCbuuJzrJvhafMxmbp7adhY+6Hj69Q7WjxEay7yB9RGm442rsfMo407AQMrT25hOY0iN9SzuE45k4cHXdhqaytGO9b8znTCnbq8x52WXBVveC+BNsnGizkzJg9ahWPrN4j3Rwmo8+PMy4HhfaaKNQdHDwdr0SthZ0zXjpSo+bjUvV207F/8U7nw3conr36KDpmzw5h9v5ByDx8jGOVen/M7xKxefpR004s5+bw1jmWdO3PmpYZd6HXlWdgwEWOZ9AgsSdvDqEZvMcnmnGl+EBz/W/xTz483QlOFxfk4QmBLMolZ3rTU23q+r+ITZrGy17Sw8hLeNkjetbNkc5E1AdhD/zjlJqM+N9wfMeTOopZTFfcLhLHyg12LtgrbtPsvxCA+7vOzipQF3DAaD8DIrXA7MFFnM4j3R0lo8L5HuJuwmixgE3uhLbT6oHHSS7fBhOTdupqSoKv5gft2v2vZCPDUYB4DQ8eMGapmw3x2pMOc/AE2lhdxPfF+Iz9IONnl/hUF1nEz3gcaoyweKeInFiTuIlSe317Hhpetox3ypvb9wG/p9gb9vWV0GgT/7FZtbWTjnaZTt8GG+EbXTrLAsXFbxoa2ly2rbufhwI4v5ONjwsLHw9JT/8R4DAJb5r4FtqDEbtfNyuaf8ysXnamfX9OP2bNv8eVwwWqe2vOyyHXVUXGw1l3eqwUV48CF/clvC67/WOINATuLNhtjpLE+5eO0117iKz/ExVUdtOxfP/2Uf9x0S+mKnpezYLqHOUyzw2vYYAPoiBoaWUi73lM+5+FzteEOQeo4Tg8NxO0SdjzHxhuwxoGKZmnOqcd8ll/eYh60vxRvPJWcC1lbeW4QQcLeDj9TyHe3waMZ/AD43dZHHCP0vTMcnBJHHDmMn83qVjw9z4l9czOOjxIMzBuSdLcGXKv2OdrK0gxCdVqEgwPJamGek4T0V6k4du50CdbjOpwir6FtLN/CxZEHA1hfNHy2ozQj8OQhag8+w/i7W2YFdwjI3bIof25Bn8b2ZLWazbZfwHTb4FFu4oXLjHGiEde7s1LC7H4B5mAa6wRZvGtKGnQb/iDzW4bsJi+8Chw0tWG5GO3LHZPry7JM6ckf/O/K53iUs8x7AE6yw7iETZwBYPp6NWeaG8yq69f5zHyT/V2v4+OAja1RzjCuwcwUQEHkGxTPQBw93zsXddwVcAVEBDwKigA53BfaugAeBvfeg++8KiAp4EBAFdLgrsHcFPAjsvQfdf1dAVMCDgCigw12BvSvAIMD/nfkU1eA/6r0Tc/9dAVdgUgE+M9E9PckgcIuJ7yFz7skVcAWuQwE+gMb9Pu+x4evQxFm6AtepAM8EPLkCrsAVK5D97gAeL+RLGDx94DPKrzEVH0wBNs+aVI45zqMNvsnG9wf4vDefez8+847lLqFOjTfdrLnN5qqeKn4zYisNq3xUfMrtJWcCNQZTSPlZK1/l2PmJzpoaLISvZPP+C18b5vPbfJEonC7p3oyqp4qHtE0llY+Kj4qRFQSwUXNj5Qcvjh/LxDKPYFznUW0yqfhJ44UKVR+B57cEcgYL4dtl8oARhWhvZqaAntI2txmxlYZb1iMrCIB37mAIKYlUfMpuyXzJR3QyX6POGSzEXrce+A4sL7X4cY1LSZKeEEHFt6ajykfFJ/XIDQL2PvvYkF3Ppsqtfqo8F292tpxX8RE7+8n1PvLY9qIBI7YUopBtVU8VX4hGMTMqHxWfJPIoWdIXYAN93C/yJlYqJa9jVXyqwZL5Dfi4eMCIkvxL21L1VPGl+aj2VD4qfs7/nDMBftmGyY7ah7XDrwUGfsUllVR8ym7J/LP5iA7mZcDsfZWSZCvYUvVU8RUoLmpC5aPiJ52dPRMI0HZGEGQtWlTxixpbWbmqj32E53fxH6z0t3WYqqeKb00flY+Kj+qRcyZgR/uYAYtQrQ4+EvM5lqdyjNnMyeMd8Lucijuro+qp4luTS+Wj4if1YBB4o69h8wEAR6n7PsN2+LDcIlPy5SMVHza21fIZfeQnx6c6eCvKm9pV9VTxm5JbYVzlo+ITLr9l+QwCf/YrNreycL5oMIQQ2C+r+IjJ4llVfUTHMoDeYrIgW5zQmQ2qeqr4M9M/aV7lo+LHDl3V4CNj8ql13pxTBlhJ2U3lMwAwXdyZwIFWd7NT0bN2f/RubzZT+aj4JDGeCcwmHLWqDEIx68iGFVSOK1yzILAC2j5E1TMX374SBw9z+aAenzz9C9NgzMVc/Bo9lvw7UHMwhTVcSmAkjuioJYOF3MFhXgqsGjCiBNkKNiQ94d8svgKHkk3M8sE2ZE+Uxu6zzeLXOOuDj6xRzTGuwM4VQLDhP1M++MjO+9HddwWKKJB1T6BIS27EFXAFmlTAg0CT3eJOuQL1FPAgUE9rb8kVaFIBDwJNdos75QrUU8CDQD2tvSVXoEkFGAR88JEmu8adcgU2VYCPIfvgI5tK7MZdgbYV4JeKfPCRtvvIvXMF6ijg9wTq6OytuALNKpD97gAeM+Srrxc9+Eiql66Ze0qTnHzXbahSq3osORNQBz5Q8UNF666pvqv4umzLtabyVvHlmJSxpPJR8VEWWUEAEUwaCELFRz2vlKn6ruIr0SzejMpbxRcnJBpU+aj4KfezggAMqAMfqPgpDluXqb6r+K35bWVf5a3it+K11q7KR8Un/c4NAvw7IZbs01ipcsOkynPxZuccc9V3FX8OziXaVHmr+BIcStpQ+aj4JJfZIIDTEN4QZJr6DNbtocrpr4o/tVgvR/VdxddjWrYllbeKL8tGt6byUfFzDGaDAAzYV4btqB3atMDwJMwcLav4kbmqq6rvKr4q2YKNqbxVfEEqRUypfFT8JImcIGAG7IzA1pfOVfzS9krWV31X8SW51LSl8lbxNbnmtKXyUfFRH3OCgB3tYwYsQu198JEYN+ZdM/eUJjn5rttQpab1YBB4o/fX5gP3cT1y32fYDh+WW2SKfRSxq6fiw8ZqL6u+q/jafEu1p/JW8aV4lLKj8lHxCR4++EhCmFi2OuiDio/5tIc8lbeKb00jlY+KH+vhg4+MFZlYVwd9UPETrjVdpPJW8a2Jo/JR8Uk9cu4J3OB05OIHH0kpdM3cU5rk5LtuQ5Va1uPR0NXJtdmBD0C0+sAJkx6XK7xm7oqKrttQvSb18MFHhp3ka67AVSiAA7YPPnIVPe0kXYEMBbLuCWTY8SqugCuwUwU8COy049xtV6CUAh4ESinpdlyBnSrgQWCnHeduuwKlFPAgUEpJt+MK7FQBBgEffGSnneduuwKCAnwM2QcfEQR0qCuwdwX4pSIffGTvvej+uwIlFPB7AiVUdBuuwI4VyH53AI8Z8tsBFz34SAGOt9Dok2B7eIrl57D7Msg7WUQ5632CeYg9qbe3jAJ6Sttca3q1qseSMwF14AMVX6NPV/uIDmYA+Azz44T155i+Rx6f055KfE2U+EtLq/XshVDxremp8lHxUT2ygkC/Ed9ifjyiYZlfHOI6N+DJpOInjRcqLODj+3DlY9jhvEtYNr26u7CWH85R51Osx77aFFbb3bKqp4pvTTCVj4qf0iMrCMCAOvCBip/iUKpM9fEOjjAwcuoSOo6ns0zHvMPq4RflPPqzLPl5trD+zpZVPVV8a3KpfFR8Uo/cIKAOfKDikwQKFkg+Yof+AdPfOA98Mpu8LIgl3gfgB1suMRn3MTcLiKlyq58qz8WbnVbmKh8Vn9RhNghgI33co6e+mMojWjSp+KjRwplb+Njb5I3Ub7B8sqMjr3ufuzCVJsypeqr4JkQInFD5qPjAlejio2juMNOuVy0Ch6UWGJ6EmaNlFT8yt8lqMR/RYQyIvMvPewM8K/gK0yD1nfoY80u8DCBXVU8VP9C7gRWVj4qflGD2TCBA2xlBkLVoUcUvamxlZdlH7tiY+A/B2/CBgfNXLI9P5T5H3jcrfdwTTNVTxbemlcpHxUf1yAkCdrSPGbAItffBR1SOMW1usKPbvwL8m7DrQMx5hvAiCricTFVPFd+akiofFT+pB4PAG30Nmw8A2Gjv+wzb4cNyi0zJ01oVHza21XIJH2GDf6HyUmCcfkYGdfonyjl/hvnduNIlrYPfxW8zS/qrUT2Og4/wnsCfPSGbx/ipAx+o+JhPpfNUH1/TIXQ4/yGwnWDsIy8LGCzGz1Y8RT6/1Mz8nzC/hEsFVU8VP9b+3OsqHxU/5n8cfCTnxiDB3Di7N45GlvgJ5buJjd6qq3izs+Vc9ZE7/s8RLezsgDrxjMkeIDpyQf4fPZb/BV9KUvVU8a3pqPJR8Uk9eDkwm7CRXvzgIypHiMjrf3bUMcEmr/8ZBHijMHnJhHJeJlxUUvXMxe9FtFw+qMd/jf7C9EvILRcfYnKXc88EaK/JgRNyiWbWW82RnYSJ1/3hg0EMAO8hj6dyJwn5PLvipQATsQwirzA/ea6gq7G/n9V69lRn8TuTZJYP+r76AD4++MjOtiJ31xUooQCCjQ8+UkJIt+EKXIICDy+BhHNwBVyB9Qp4EFivnSNdgYtQwIPARXSjk3AF1ivgQWC9do50BS5CAQ8CF9GNTsIVWK8Ag4C9M2Dz9dYc6Qq4AntR4PjuAIOAvTNg872QcD9dAVdgvQLHdwf8cmC9iI50BS5CAQ8CF9GNTsIVWK9A9rsDeMyQL7nwWXe+LcfXZvnlnBfIz3o3XsWjrc1TLR/7dmwsgicgRm354ZHoOwabE9+oAVVPFb8RrdVmVT4qPuX4kjMBdeADFZ/iUDK/iI/orPcx/dF3Wsy/r1HGD5By4huG/CYhvzx8HLMgBtphnqqnim9NMpWPio/qkRUEsHHyqOWDj0QlPGRCI74CyqM53yL8EFP09WCUc0cfvCZ6sNC9ivx5v7z7GXhe/DazpJNa1iMrCICsOvCBil+i99q6ko/oZL4C+gEmHtV/mnDiGcrY1jj9joxo4BhX3Mm6pCc4qvjWZFL5qPikHrlBgJ/FiiXeH2BKlR9K0+W5eLOz5TzFobSPr6gXggW/GxDu9DwLiH29aUvOW9pW9VTxW3JbY1vlo+KTPj9KlvQFwYbKI1Uq3aYKVHzKbsn8mj6iLY5UxE+M8bKA9w145sCbrK+xfBEfEwEPC24Xu82gv7JT63rknAm82bO1I2JI3jqZd7hTScWn7JbMr+ojNgqe2tnHRHkPgVH+u5KEzmxL1VPFn5n+SfMqHxV/4lCYkRMErL5Fd1tfOlfxS9tbU7+KjwgC9u3B9+Akvz34FFNskJI1HFrCqHqq+Ja0oC8qHxUf1YNBgBshP5KZ+hCmHe1jBixC+eAjMXUieQgAvGv+Ic8GMPHSgJcC1J8dfBykBMt7TtewzSzpnxb14DMp3O5uGARuMfG61HZoLP4/YSO979di5RaZUgHkRsX/35Ptlir7yJt/nfjGCO3z0oAfoaSeqRtAVr35uaqnim9NIJWPik/owbNP7vddEOCcgcB2aK6PkzrwgYof+7PF+uY+ojOpMZ8nOAmayLtDGW8YxoLtFny3tqnqqeK35rfUvspHxY/95XbG/f4YBMYVxuv8FPY740ys8+iVO/iIgo80XTxL5TjrUB/R+TxBJ34EwCDBzr6EpOqp4lvTUOWj4pN6PEyWBAXYaH3wkV4PaMEj+cngEIFcc4v8Z+Dk2h82ea+Azw6cnCXMGWyxHDwufptZonvLesw+JxAQ5VGfQ2rbUewZ1t/FOk9ju4RlHuW4Ecc25Fl8b+acs1kfpziijH/38TTLrut/7PU4DiiCdd4M/Ah1vsWcN4zuMfEM4OJeIAInSc8cPOrsKTWphw8+sqdNyH11BQopgAMQzzyfY/4g63KgULtuxhVwBRpUwINAg53iLrkCNRXwIFBTbW/LFWhQAQ8CDXaKu+QK1FTAg0BNtb0tV6BBBTwINNgp7pIrUFMBDwI11fa2XIEGFfAg0GCnuEuuQE0FPAjUVNvbcgUaVMCDQIOd4i65AjUVyH53AI8X8vl2H3xkoneg0S2K7VsBXGbiuALH9yuYkVuPdfecwPPit5kl/dOqHkvOBNSBD1T8Er3X1l3to3Uw5hxEhBM/Hcad/xcs2wtFN1judgzMJ+utJdAYbrWePQ8V35gcNyofFR/VIysIYIO9+IEkVI5Q91tMfDvwmGCTZwX3mPguuKXcelZ/l3NVTxXfmmgqHxU/pUdWEIABdeADFT/FoVSZ6iOP9rGRhbovwqAT+Tknptx6h9r7/VX1VPGtKafyUfFJPXKDwPF0dmSJRzmmVPmhNF2eizc7W85THHJ95DcUOFTb4xknc+vNmGm+WNVTxbcmkMpHxSf1eJQs6QuCjZofwEil21SBik/ZLZlfwkfY4AcjYsnOALoPreTWixnaS56qp4pvTSeVj4qf0yPnTIBfymGyI+Jh7fBrgeFJmDlaVvEjc5usbuIjOo/RmwGSow/H9OvI5NbbhPk2RlU9Vfw2rNZbVfmo+EnPc4KAGZg7zbV6qbmKT9ktmV/aR35u7CV2cvvbMOVrbr0UvtV8VU8V35ouKh8VH9UjJwjY0T5mwCKUDz4yUgc7Pndsfk+QN3SSKbde0kCbBdewzSxRvmk9ZoMANtL7nq3t8CF5i0yxD4t29VR82NhWy6V9hL1P6Svm3eAOKb9z66XwreaD18VvM0u0b12P2SDQk1UHPlDxSzRfW7eIj+hwjjP4NubHAIBl/mtwGzqWWy/E7GxZ1VPFtyaXykfFJ/XIDQLqwAcqPkmgYIHsI3bsp/DnPcyPAaD3j4HhmHLrHQH7XFD1VPGtqabyUfFJPbI/OY4N9zWs8Dl4DpV1gzkvBX7FdBx7oM/7A3kclWjwlxnWZ/HAnTXl+JjiiHwe6V9h6vTpiVAjXkY9RTkHHr3Jrce6e0/gOtvnqEONdrvNLOmjlvSAL8dPjs8+JxCQbHLghMC/EosKR0ZqBoLufsDImfCeSW69kYldrip6kvAsfmeqzPLBzll9AJ/sM4Gdie3uugKuwIQC4ZlA7j2BCXNe5Aq4AntWwIPAnnvPfXcFCijgQaCAiG7CFdizAh4E9tx77rsrUEABDwIFRHQTrsCeFQj/IuRnsMZc+PLL5LPvY4CvuwKuQFsKYB/m8xq3Ka8YBPgfduott7sU0PNdAVdgNwrwA8F8KCua/gdXGS+nmw+MKgAAAABJRU5ErkJggg==\n",
      "text/latex": [
       "$\\displaystyle \\left[\\begin{matrix}0.0 & 0.0 & 0.0 & 0.0\\\\0.0 & 0.0 & 0.0 & 0.0\\\\0.0 & 0.0621 & 0.0659 & 0.07\\\\0.0 & 0.17 & 0.0 & 0.0\\\\0.0 & 0.0 & 0.0 & 0.0\\\\0.0 & 0.34 & 0.0 & 0.0\\\\0.0 & 0.18 & 0.0 & 0.0\\\\0.0 & 0.22 & 0.0 & 0.0\\end{matrix}\\right]$"
      ],
      "text/plain": [
       "⎡0.0   0.0     0.0    0.0 ⎤\n",
       "⎢                         ⎥\n",
       "⎢0.0   0.0     0.0    0.0 ⎥\n",
       "⎢                         ⎥\n",
       "⎢0.0  0.0621  0.0659  0.07⎥\n",
       "⎢                         ⎥\n",
       "⎢0.0   0.17    0.0    0.0 ⎥\n",
       "⎢                         ⎥\n",
       "⎢0.0   0.0     0.0    0.0 ⎥\n",
       "⎢                         ⎥\n",
       "⎢0.0   0.34    0.0    0.0 ⎥\n",
       "⎢                         ⎥\n",
       "⎢0.0   0.18    0.0    0.0 ⎥\n",
       "⎢                         ⎥\n",
       "⎣0.0   0.22    0.0    0.0 ⎦"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display_matrix(V.round(4))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id='sec4'></a>\n",
    "## Perpetual put\n",
    "\n",
    "\n",
    "An American option is called *perpetual* if it has no expiration date i.e. $T=\\infty$:\n",
    "\n",
    "$$ V(t,s) =  \\sup_{\\tau \\in [t,\\infty]} \\mathbb{E}^{\\mathbb{Q}}\\biggl[ e^{-r(\\tau-t)}\\, ( K - S_{\\tau} )^+ \\, \\bigg|\\, S_t=s \\biggr]. $$\n",
    "\n",
    "By the time homogeneity of the problem we can set $t=0$ and obtain:\n",
    "\n",
    "$$ V(s) =  \\sup_{\\tau \\in [0,\\infty]} \\mathbb{E}^{\\mathbb{Q}}\\biggl[ e^{-r \\tau}\\, ( K - S_{\\tau} )^+ \\,\\bigg|\\, S_0=s \\biggr]. $$\n",
    "\n",
    "The PDE for the perpetual put option is:\n",
    "\n",
    "$$\n",
    "\\max \\biggl\\{   \n",
    "          r\\,s \\frac{ d V(s)}{d s}\n",
    "          + \\frac{1}{2} \\sigma^2 s^2 \\frac{d^2  V(s)}{d s^2} - r  V(s), \\;  \n",
    "          ( K - s )^+ - V(s) \\biggr\\}  = 0.\n",
    "$$\n",
    "\n",
    "In order to solve this obstacle problem we need to find a value $s_0 \\in (0,K)$ such that:\n",
    "\n",
    "$$ V(s) = ( K - s ) \\quad \\text{for} \\quad s \\in [0,s_0] \\quad \\text{ (stopping region)}$$\n",
    "\n",
    "and \n",
    "\n",
    "$$ r\\,s \\frac{ d V(s)}{d s}\n",
    "          + \\frac{1}{2} \\sigma^2 s^2 \\frac{d^2  V(s)}{d s^2} - r  V(s) = 0 \\quad \\text{for} \\quad s \\in [s_0, \\infty) \\quad \\text{ (continuation region)}$$\n",
    "          \n",
    "We can search for the solution of the linear second order ODE in the continuation region, by guessing a solution in the form $V(s) = s^n$.     \n",
    "We then obtain a quadratic equation in $n$ that has two solutions $n_1=1$ and $n_2 = -\\frac{2r}{\\sigma^2}$.     \n",
    "We can express \n",
    "\n",
    "$$V(s) = A s + B s^{-\\frac{2r}{\\sigma^2}} \\quad \\text{for} \\quad s \\in [s_0, \\infty).$$  \n",
    "\n",
    "Since $V(s) \\to 0$ as $s\\to \\infty$, we must have $A=0$.    \n",
    "We then require that *V(s)* is **continuous** and **differentiable** at $s_0$:\n",
    "\n",
    "$$ B s_0^{-\\frac{2r}{\\sigma^2}} = K -s_0 \\quad \\text{and} \\quad -\\frac{2r}{\\sigma^2} B s_0^{-\\frac{2r}{\\sigma^2}-1}  = -1$$\n",
    "\n",
    "These equations are satisfied for:\n",
    "\n",
    "$$ B = \\frac{\\sigma^2}{2r}\\, s_0^{\\frac{2r}{\\sigma^2}+1} \\quad \\text{and} \\quad s_0 = \\frac{K}{\\frac{\\sigma^2}{2r}+1}. $$\n",
    "\n",
    "It is also interesting to have a look at [2], where the author derives the formulas above using a probabilistic approach."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "def perpetual_put(S, K, sigma, r):\n",
    "    \"\"\"  analytical formula for perpetual put option \"\"\"\n",
    "    s0 = K / (sigma**2/(2*r) + 1)\n",
    "    B = sigma**2/(2*r) * s0**((2*r)/sigma**2 + 1)\n",
    "    return np.where( S<s0, K-S, B*S**(-2*r/sigma**2) )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "S = np.linspace(60,160,1000)    # stock price\n",
    "K=100.0     # strike\n",
    "r=0.1       # risk free rate \n",
    "sig=0.2     # diffusion coefficient or volatility\n",
    "s0 = K / (sig**2/(2*r) + 1)     # optimal excercise value"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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WhEWFsbbb7+dnnv48OGA6yl/oaGhxMfHc/jwYW644QaaNm1K06ZNWbZsGQAfffRR+pMA77rrrvQCuXjx4jz99NO0adOG5cuX8+GHHxIWFkbTpk25/fbbAXj22Wd57bXXABg/fjyNGjUiLCyMwYNdU+rGxcUxfPhwWrVqRbNmzfjqq68u+Bw333wz8+f/3X8aGRnJ559/zu7du+nUqRPNmzenefPm6Xkzmjp1KqNHj05fjoiISH+42A8//EC7du1o3rw5N954I6dPn77g+EtmrfXYF+ANRAGngf9zr3sW2A1sAN4HymTXTosWLWxREH3gT7v/2Xr21NMV7OZVPzsdR0RExBGbN2929PyrV6+2oaGh9vTp0zY2NtY2atTIrl271u7atcsC9tdff7XWWnvHHXfYV1991VprbY0aNWx0dHR6G2eXd+3aZb29ve2GDRtsamqqbd68ub3jjjtsWlqa/fLLL22/fv2stdaePHnSJicnW2ut/fHHH+2AAQOstdYuXLjQ9unT54KMb7/9tn3hhRestdYmJCTYFi1a2D///NOmpqbaTp062Tlz5tgWLVqkZ73pppvsG2+8Ya21NiUlxZ44ccJu3rzZRkRE2KSkJGuttaNGjbLTpk2z1loL2JkzZ1prrd24caOtV69e+uc7duyYtdbaZ555Jv3zV6pUySYkJFhrrT1+/Li11trHH3/cTp8+PX1d3bp17enTp8/5HHPmzLFDhw611lqbmJhoq1atauPj421cXJw9c+aMtdba7du327O14K5du2zjxo2ttdZ+8MEH9t57701vq0+fPnbhwoU2OjradurUKf1cr7zyin3uuecyvdaZ/VkDVttM6lGPPtzEWpsKhBtjSgNfGGNCgUnAC7h6nV8A/gcMP/9YY8xIYCRA9erVPRkz3wipXIvoEfOJfbcXlb++jS1en9Kw+dVOx5JLsG/fPgCqVavmcBIRkcKjS5cuF6y76aabuOeee4iPj6d37wtvj4qMjCQyMpKjR49eMBXo2d7IrPz666/ccMMNBAUFATBgwACWLFlC3759qVatGh06dABgyJAhjB8/nocffvii7dWqVYsmTZoA0LhxY7p164YxhiZNmrB7924ATp48ybBhw9ixYwfGGJKTky/a5g8//MCGDRuYPXt2+vE7duygVq1aTJ06lbCwMO666670rD///HP6+GNvb29K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\n",
      "text/plain": [
       "<Figure size 864x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(12,5))\n",
    "plt.plot(S, perpetual_put(S,K,sig,r), label=\"perpetual option price\")\n",
    "plt.plot(S, np.maximum(K-S,0), label=\"option intrinsic value\")\n",
    "plt.axvline(x=s0, color='k', linestyle='--', label=\"optimal excercise value\")\n",
    "plt.xlabel(\"s\"); plt.ylabel(\"V(s)\"); plt.title(\"Perpetual put option\"); plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Numerical computation of perpetual put"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can pass to the log-variable $x = \\log s$ and obtain the simpler equation with constant coefficients:\n",
    "\n",
    "$$ \\max \\biggl\\{   \n",
    "          (r - \\frac{1}{2} \\sigma^2) \\, \\frac{ d V(x)}{d x}\n",
    "          + \\frac{1}{2} \\sigma^2 \\frac{d^2  V(x)}{d x^2} - r  V(x), \\;  \n",
    "          ( K - e^x )^+ - V(x) \\biggr\\}  = 0. $$\n",
    "\n",
    "equivalent to:\n",
    "\n",
    "$$ \\min \\biggl\\{   \n",
    "          -(r - \\frac{1}{2} \\sigma^2) \\, \\frac{ d V(x)}{d x}\n",
    "          - \\frac{1}{2} \\sigma^2 \\frac{d^2  V(x)}{d x^2} + r  V(x), \\;  \n",
    "          V(x) - ( K - e^x )^+ \\biggr\\}  = 0. $$\n",
    "\n",
    "This **variational inequality** can be reformulated as a **linear complementarity problem**:\n",
    "\n",
    "$$ \\biggl(   -(r - \\frac{1}{2} \\sigma^2) \\, \\frac{ d V(x)}{d x}\n",
    "          - \\frac{1}{2} \\sigma^2 \\frac{d^2  V(x)}{d x^2} + r  V(x),  \n",
    "          \\biggl)\\, \\cdot \\biggl( V(x) - ( K - e^x )^+ \\biggr)  = 0, $$\n",
    "$$ -(r - \\frac{1}{2} \\sigma^2) \\, \\frac{ d V(x)}{d x}\n",
    "          - \\frac{1}{2} \\sigma^2 \\frac{d^2  V(x)}{d x^2} + r  V(x) \\geq 0, \n",
    "          \\quad \\quad  V(x) - ( K - e^x )^+ \\geq 0.\n",
    "          $$          \n",
    "          \n",
    "At this poins, we can discretize the equations by finite difference using a central approximation for the first order derivative;\n",
    "\n",
    "$$  -(r - \\frac{1}{2} \\sigma^2)  \\frac{V_{i+1} -V_{i-1}}{ 2 \\Delta x} \n",
    "    - \\frac{1}{2} \\sigma^2  \\frac{V_{i+1} + V_{i-1} - 2 V_{i}}{\\Delta x^2} + r  V_i  \\geq 0 \n",
    " \\quad \\quad  V_i - ( K - e^{x_i} )^+ \\geq 0. $$\n",
    "\n",
    "That in matrix form becomes:\n",
    "\n",
    "$$  A \\, V - B \\geq 0 \\quad \\quad V - C \\geq 0 \\quad \\quad (A \\, V - B)\\cdot(V-C) = 0. $$\n",
    "\n",
    "where as usual, $A$ is a tridiagonal matrix and $B$ is the vector containing the boundary values. $C$ is the payoff.\n",
    "\n",
    "A description of numerical methods to solve the linear complementarity problem can be found in [3] or [4].     \n",
    "Here it is important to choose a big value of `S_max` because the perpetual put price goes to zero asimptotically.     \n",
    "The PSOR method is a slight modification of the SOR method introduced in the notebooks **A1** and **A2**. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "Nspace = 10000   # space steps \n",
    "S_max = 10*K     # very large in order to minimize the error due to asymptotic boundary condition           \n",
    "S_min = K/3\n",
    "x_max = np.log(S_max)  \n",
    "x_min = np.log(S_min)\n",
    "x, dx = np.linspace(x_min, x_max, Nspace, retstep=True)    # space discretization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "sig2 = sig*sig; dxx = dx * dx\n",
    "\n",
    "a = (r-0.5*sig2)/(2*dx) - sig2/(2*dxx)      # -1 diagonal\n",
    "b = sig2/dxx + r                            # main diagonal  \n",
    "c = -(r-0.5*sig2)/(2*dx) - sig2/(2*dxx)     # +1 diagonal"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "C = np.maximum(K-np.exp(x),0)          # payoff\n",
    "\n",
    "B = np.zeros(Nspace)        # vector to be used for the boundary terms   \n",
    "B[0] = -a*(K-S_min)         # boundary condition\n",
    "B[-1] = 0                   # boundary condition"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Convergence after 29923 iterations\n"
     ]
    }
   ],
   "source": [
    "V = np.asarray( PSOR( a,b,c, B, C, w=1.999, eps=1e-12, N_max=1000000 ) )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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8ePH2b9/P6VLl3Y6TqaQWT7TWrdERNJOWt2HVUTkKpGRkeTLly9D79iKc4wx5MuXL1Mc7fMWmeUzrXVLRCTtqGAVEUdl9B1bcZbWr7SXWZZ5ZnmfIiJOU8EqXqtly5a0bKn2ucQzjh8/TkhICCEhIRQuXJiiRYsSEhJC7ty5qVKlSppm+emnn9iyZcul10OGDGH+/Pkpns7u3bupVq3aDWV5+OGHL8siIiIi4iRdwypea/DgwU5HkAwsX758rFu3DoBXX32V7Nmz89xzz7F79246dOiQ6vOLiYnBzy/hr9yffvqJDh06XCqUX3/99VSff3LExsbyxRdfODJvkbQSGxuLr69voq8TYq3FWouPj37nFxFJa+n+m/fChTOcPXPA6RgikkaOnImk25jlHDnruWvHYmNjeeSRR6hatSpt2rQhIiICgJ07d9KuXTtq165NkyZN+PvvvwHYs2cPLVu2JDg4mJYtW7J3714AevXqRf/+/WnRogUvvPBCguMvW7aMmTNn8vzzzxMSEsLOnTvp1asXU6ZMAWD16tU0bNiQGjVqULduXc6ePcvu3btp0qQJtWrVolatWixbtuya72fRokU0bdqULl26UKVKFR599FHi4uIAyJ49O0OGDKFevXosX76c5s2bExYWBsAvv/xCrVq1qFGjxqWzHc6dO8eDDz5InTp1qFmzJjNmzEj9/wCRGzBx4kTq1q1LSEgIffr0ITY29qr1/MrXI0aMoFq1alSrVo1Ro0YBrjMWKleuTN++falVqxb79u1z9o2JiHiZI2cjGb9st+dndPFXQ29+1K5d2yYkKuqc7fxlsH3x25sT7C/pW7t27Wy7du2cjiEetGXLlhSP89K0DbbUwNn2pWkbUi3HK6+8Yt977z1rrbW7du2yvr6+du3atdZaa++88047YcIEa621N998s92+fbu11toVK1bYFi1aWGut7dChg/3666+ttdaOGzfOdurUyVprbc+ePe2tt95qY2Jirjl+z5497Y8//ngpz8XXFy5csKVLl7arVq2y1lp7+vRpGx0dbc+dO2cjIiKstdZu377dXvyO3LVrl61atepV72/hwoU2MDDQ7ty508bExNhWrVpdmh9gJ02adGnYZs2a2dWrV9sjR47YYsWK2X///ddaa+3x48ettdYOGjTo0vI4efKkLV++vA0PD0/pIk9TCa1nQJj1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axKqVOzEPdnKMjlyP+s3fud0HBERERERcdjZyGhemr6R7mNXEBtn+fbherzTNZhcWf2djpbhqGBNhifaj6VgHLy++h2io887HUdEHDRq1CjOn///98Att9zCqVOnbni6ixYtokOHDjc8HU/47LPP+Oabb9J0nrt376ZatWppOk8REZHkWLD1MG1GLub7VXt5uHFpfunXhEbl8ic9olwXFazJkC17IV6s3IvtvnFM/OVxp+OIiIOuLFjnzJlD7ty5nQuUimJjYxPs/uijj3L//fencRoRERHvcjz8Ak99v5aHxoeRM8ifaX0b8XKHKmQNUDu2nqSCNZlubvAcN/vk5JNjqzmwf4XTcUQklYwYMYJq1apRrVo1Ro0aBbiO7lWqVImePXsSHBxM165dOX/+PKNHj+bgwYO0aNGCFi1aAFCqVCmOHTt2aZyHH36YatWqce+99zJ//nwaNWpE+fLlWbVqFQCrVq2iYcOG1KxZk4YNGybZsFhsbCzPP/88derUITg4mDFjxlzK/eCDDwKwceNGqlWrxvnz5zl8+DBdunShRo0a1KhRg2XLlgEwceJE6tatS0hICH369LlUnGbPnp0hQ4ZQr149li9fzjfffENwcDA1atSgR48eALz66qsMHz4cgNGjR1OlShWCg4O56667ADh37hwPPvggderUoWbNmsyYMeOq99G9e3fmzJlz6XWvXr2YOnUqu3fvpkmTJtSqVYtatWpdyhvf119/zRNPPHHpdYcOHVi0aBEA8+bNo0GDBtSqVYs777yT8PDway5PERGRlLLW8tPaA7Qa8QdzNx3imVYVmPVkY0KK53Y6WuZgrfX6R+3ata03OHRora37ZVX72Nd1bVxsrNNxMrzffvvN/vbbb07HEA/asmWLo/MPCwuz1apVs+Hh4fbs2bO2SpUq9q+//rK7du2ygF26dKm11toHHnjAvvfee9Zaa0uWLGmPHj16aRoXX+/atcv6+vraDRs22NjYWFurVi37wAMP2Li4OPvTTz/ZTp06WWutPX36tI2OjrbWutbx22+/3Vpr7cKFC+2tt956VcYxY8bYoUOHWmutjYyMtLVr17b//vuvjY2NtU2aNLHTpk2ztWvXvpS1W7duduTIkdZaa2NiYuypU6fsli1bbIcOHWxUVJS11trHHnvMjh8/3lprLWAnTZpkrbV206ZNtkKFCpfe3/Hjx6211r7yyiuX3n+RIkVsZGSktdbakydPWmutHTRokJ0wYcKlbuXLl7fh4eGXvY9p06bZ+++/31pr7YULF2yxYsXs+fPn7blz52xERIS11trt27fbi9/3u3btslWrVrXWWvvVV1/Zxx9//NK0br31Vrtw4UJ79OhR26RJk0vzevvtt+1rr7121TJMaD0DwqwXbN/S88Nbts0iIp504OR52+vLlbbkC7Nt54+X2m3/nXE6UoaV2LZZx69ToHDhEJ4o3IR3jyzltz+H0abJEKcjZWitWrVyOoKksebNm1/VrVu3bvTt25fz589zyy23XNW/V69e9OrVi2PHjtG1a9fL+l08CpeYpUuX0qVLF7JlywbA7bffzpIlS+jYsSPFixenUaNGANx3332MHj2a55577prTK126NNWrVwegatWqtGzZEmMM1atXZ/fu3QCcPn2anj17smPHDowxREdHX3Oa8+bNY8OGDUyZMuXS+Dt27KB06dJ8/fXXBAcH06dPn0tZf//990vXm/r6+pIrVy4mTJjAmjVrqFOnDgAREREULFjw0jB33HHHpXG7du1K/vyu63Dy5s17VZ7g4GDuvfdeOnfuTOfOnS9lnDlz5qWjsJGRkezdu5fKlStfGq99+/Y89dRTXLhwgV9++YWmTZuSJUsWTp8+zRNPPMG6devw9fVl+/bt11we8a1YsYItW7Zceu9RUVE0aNAg2eOLiIgkJi7O8u2qvbwz929i4yxDOlShZ8NS+PoYp6NlOipYU+ju1qOYNaEeb++YTIPgB8mRq5jTkTKsdevWARASEuJoDsm4XD/mJcwYc83XCQkMDLz03MfH59JrHx8fYmJiABg8eDAtWrRg+vTp7N69O8Ei/cqMH374IW3btr2q344dO8iePTsHDx5Mcho9e/bkrbfeuqpfUFAQvr6+l4ZL6n3+/PPPLF68mJkzZzJ06FA2b96MtZapU6dSsWLFRMcLCgqiefPm/Prrr0yaNIm7774bgJEjR1KoUCHWr19PXFwcQUFX37POz8+PuLi4S68jIyMv5W3dujXff//9NTOLiIikxL9Hwxk4dSOrdp+gcbn8vHV7dYrnzep0rExL17CmkJ9fIK80eIXjPjB67iNOx8nQ+vXrR79+/ZyOIWlo0aJFVz369u0LQNasWRPs36tXLwDy589/Vb+kNG3alJ9++onz589z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\n",
      "text/plain": [
       "<Figure size 1152x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(16,5))\n",
    "ax1 = fig.add_subplot(121); ax2 = fig.add_subplot(122)\n",
    "ax1.plot(S[::40], perpetual_put(S[::40],K,sig,r), '*', label=\"Theoretical price\")\n",
    "ax1.plot(np.exp(x), V, label=\"Numerical value\")\n",
    "ax1.plot(np.exp(x), C, label=\"Payoff\")\n",
    "ax1.axvline(x=s0, color='k', linestyle='--', label=\"optimal excercise value\")\n",
    "ax1.axis([30,200,-1,70]); ax1.set_title(\"Numerical computation - Perpetual put option\")\n",
    "ax1.set_xlabel(\"s\"); ax1.set_ylabel(\"V(s)\");  ax1.legend()\n",
    "ax2.plot(np.exp(x), perpetual_put(np.exp(x),K,sig,r)-V, label=\"error\" )\n",
    "ax2.set_title(\"Difference: theoretical - numerical\")\n",
    "ax2.set_xlabel(\"s\"); ax1.set_ylabel(\"Error\");  ax2.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## References\n",
    "\n",
    "[1] F. Longstaff, E. Schwartz (2001) *Valuing American Options by Simulation: A Simple Least-Squares Approach*, The Review of Financial Studies, vol 14-1, pag 113-147.   \n",
    "\n",
    "[2] Steven Shreve, *Stochastic calculus for finance, volume 2*, (2004).\n",
    "\n",
    "[3]  Daniel Sevcovic, Beata Stehlikova, Karol Mikula (2011). \"Analytical and numerical methods for pricing financial derivatives\". Nova Science Pub Inc; UK. \n",
    "\n",
    "[4] Wilmott Paul (1994). \"Option pricing - Mathematical models and computation\". Oxford Financial Press."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
